home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS25.ADF / KickPlay / patching.kickstart < prev    next >
Text File  |  1989-01-26  |  9KB  |  186 lines

  1. This file discribes how to modify kickstart to automatically "ADDMEM" on
  2. boot up, and how to change the upside down hand to any graphics you want.
  3.  
  4. Also included in this file is the text of a message I posted some time ago
  5. discribing how to patch WACK to allow you to redirect output anywhere,
  6. such as a printer or disk file - super valuable for hacking. I hope this
  7. text informs and encourages you to have some fun of your own. Too many
  8. people have forgotten what computers really are - the world's greatest
  9. toy!!! On with it...
  10.  
  11.  
  12. Patching kickstart:
  13.  
  14. The first question to answer is "Where do I put my patch?". One good spot
  15. is the place where the upside down hand is drawn, which is where I've
  16. put the "ADDMEM" patch. The second question is "How do I send the bootup
  17. routines to my code?". I have chosen to modify a pointer in the device
  18. driver-type structure at the beginning of the "strap" routine. How did
  19. I find out about "strap"? You type "mods" in the 1.0 version of WACK and
  20. it gives you a list of devices,resouces,and that kind of stuff. "strap"
  21. is the code that boots a "workbench" type of disk and displays the
  22. upside down hand. The address that WACK V1.0 gives you is the address of
  23. a "rom tag". A "rom tag" is a fancy name that means a bunch of data. The
  24. format of the data is found in the documentation of the skeleton device
  25. driver in the ROM KERNAL MANUAL VOLUME 2, near the very back. The pointer
  26. we are going to change is called "RT_INIT". It's a pointer to the "strap"
  27. routine. The pointer, located at address $FE889A normally contains
  28. $FE88D6. We'll change it to $FE8CFE, the part of kickstart that displays
  29. the upside down hand. I'll take about the display routine in detail
  30. later. Now we need code to put at $FE8CF8. Fortunately, V1.2 of kickstart
  31. added a very convenient command to add memory. Here's a routine to do it:
  32.  
  33.  JMP $FE8D6A ;SKIP OVER THIS PATCH (SO IT WILL ONLY BE RUN ONCE)
  34.  MOVEM.L D0/D1/D2/A0/A1/A6,-(A7)
  35.  MOVE.L 4,A6
  36.  MOVE.L #NUMBER OF BYTES TO ADD,D0
  37.  MOVE.L #$10005,D1 ; ADD "FAST" MEMORY
  38.  MOVEQ #0,D2
  39.  MOVE.L #$ADDRESS OF EXTRA MEMORY,A0
  40.  SUB.L A1,A1
  41.  JSR -618(A6)
  42.  MOVEM.L (A7)+,D0/D1/D2/A0/A1/A6
  43.  JMP $FE88D6 ;GO TO THE NORMAL "STRAP" PROGRAM. OUR PART IS FINISHED.
  44.  
  45. Simple eh? IMPORTANT NOTE!!!:
  46. If you have done the AMAZING COMPUTING 512K upgrade and did the 2 chip
  47. fix which disables the RAM so it won't be allocated as chip RAM....
  48. you must add a few lines of code to enable the RAM BEFORE you do the
  49. add!!!! A few lines like this:
  50.  
  51.  BCLR #7,$BFD100 ;TURN ON MOTOR
  52.  BSET #3,$BFD100
  53.  BCLR #3,$BFD100
  54.  BSET #7,$BFD100 ;TURN OFF MOTOR
  55.  BSET #3,$BFD100
  56.  BCLR #3,$BFD100
  57.  
  58. The changes can be made fairly easily using DISKZAP. Here are the sector
  59. numbers: (I think the byte numbers are right, but double check me!
  60. That goes for all the numbers I give in this file.)
  61.  
  62. The pointer: SECTOR $145, BYTE $9A
  63. The display hand patch code: SECTOR $147, BYTE $F8
  64.  
  65. ***********************************************************************
  66. ******** NOW FOR THE REALLY FUN PART!!!!!
  67. ******** AMAZE YOUR FRIENDS WITH A CUSTOM BIT MAP WHERE THE
  68. ******** "INSERT WORKBENCH" SCREEN USED TO BE (BEFORE YOU MODIFIED
  69. ******** IT USING THE INFORMATION BELOW)
  70. ***********************************************************************
  71.  
  72. THE DISPLAY HAND ROUTINE IN DETAIL:
  73. This is the routine that is called when you boot (or reset) and have a
  74. disk in the drive that is not a bootable disk (or no disk at all).
  75. The infamous "upside down hand" routine.
  76. It uses a combination of line drawing and straight bit maps to optimize
  77. memory use. The hand and the disk are made by drawing lines and doing area
  78. fills. The text - "Work Bench", "V1.2" - is made using straight bit maps.
  79. Because the routine is table driven, modifying the display is easy.
  80. All you have to know is the format of the tables. Since the AUTO-ADDMEM
  81. fix discribed above uses the line draw portion for space, I will talk
  82. about the bit map part. First, load up DPAINT and create a picture, any
  83. picture, as long as it isn't too big. USE THE ONE COLOR MODE!
  84.  Before you get a feel for how much
  85. room you have, keep it very small. Save it as a brush, so it won't be saved
  86. in a compressed format. Now you need to know the format of the bit map in
  87. "strap":
  88.  
  89. The first byte determines whether or not this is the last display
  90. sequence. If the high bit is set, the routine exits. The second byte
  91. is a bit plane mask, determining which bit planes may be written to.
  92. If this is $FF, then all bit planes are writable. Which ones are actually
  93. written to depend on which color register was defined as the "pen". In
  94. this case, color register 3 was chosen. This means that, assuming all bit
  95. planes are enabled, bit planes 1 and 2 will be written in with ones,
  96. selecting color register 3, just like we asked. If however, we set the
  97. mask to 2, only bit plane 2 will be written in, and so we will actually
  98. be displaying color register 2. If we put a 1 in, color 1 is displayed, and
  99. if 0 is there, nothing is displayed (not real useful). Nothing mysterious
  100. there. The third and forth bytes are the dimensions of the thing we are
  101. displaying, the third byte being the width and the forth the height.
  102. The fifth and sixth bytes are the coordinates to place the picture, first
  103. X, then Y. After that is the actual data.
  104.  
  105. "Where do I get the 'actual data'?"
  106.  
  107. We examine that DPAINT file you created. Type "TYPE FILENAME OPT H",
  108. where "FILENAME" is the name of your picture. You should see a bunch of
  109. hexadecimal numbers and ASCII text to the right. Notice "ILBMHMHD".
  110. After that notice 4 bytes which are of no use to us. Continue and note
  111. that you find the width and height as 1 word each next to each other
  112. in a convienient hex form. Write them down so we know them later. Next find
  113. "BODY" and notice the size in bytes following it. I hope that number
  114. isn't larger than about $190!! If it is, scale back a bit. Now the
  115. nasty part: copy down all those strange looking numbers following the
  116. size. This is another reason to keep the picture small!!! As mentioned
  117. before, your picture can be displayed in any of 3 color registers.
  118. You can define the color registers to be anything you want. Just
  119. locate sector $146 and find the byte sequence that is as follows:
  120. 0FFF0000077C0BBB. They are the first 4 color registers. Place your picture
  121. in the format discribed above at sector $148, byte $1B8 (or whereever you
  122. see "00010408...")
  123.  
  124. For those of you who have been busily skipping over all of the above and
  125. just want an example, here it is:
  126.  
  127. 00            01        04     08      55 66              0123456787898...
  128. more to come  color #1  width  height  X & Y destination  your picture
  129. (FF-the end)
  130.  
  131. There is no limit to what kinds of things you can create except how
  132. many bytes you can find!! I personally have a simple white on black
  133. "INSERT DOS", but you could get really elaborate. For example, you
  134. could write a custom routine to draw a circle with a line through it and
  135. the letters S and T in the center. BE CREATIVE!!! HAVE FUN!!!
  136.  
  137. NOTE: THIS NEXT ONE IS SUPER USEFUL FOR TEARING APART ROM ROUTINES
  138. (AND OTHER THINGS)
  139.  
  140. Patching WACK V1.004:
  141.  
  142. For those who are interested, I patched WACK so that you can redirect
  143. output anywhere, such as a printer or disk file (defaults to AmigaDOS
  144. window)...best of all, this can be done by CHANGING ONLY 3 BYTES!!!!!!!!
  145.  
  146. Here it is: (assumes V1.004 of WACK)
  147.  
  148. 1) From FILEZAP, go to record #178, change 2nd "23c2" to "6004"
  149. 2) Go to record 274 (maybe 275), find "660e2f3900000014". Change the
  150. "14" to "10".
  151. 3) ENJOY!!! (you will also want to change the "raw:..." text so the
  152. window is less bothersome)
  153.  
  154. Here's why it works:
  155.  
  156. WACK automatically calls INPUT and OUTPUT, but later overwrites them
  157. both with the filehandle returned from the opening of the "RAW:" window.
  158. The "6004" is a BRA.S *+4 which skips over the writing to _STDOUT.
  159. Why WACK does this is a mystery; I guess it was written in a funky
  160. language like "C". The "10" change causes WACK to send _STDIN to
  161. CLOSE instead of _STDOUT, so the "RAW:" window disappears.
  162.  
  163. One more thing:
  164. If anyone knows a better way of hacking files than FILEZAP, please let
  165. me know.
  166.  
  167.  
  168. CONCLUDING NOTE:
  169.  
  170. THERE ARE THOUSANDS OF OTHER NEAT INSIGHTS INTO KICKSTART TO BE MADE,
  171. PATCHES TO BE DONE. UNFORTUNATELY, COMMODORE DOESN'T PUBLISH SOURCE
  172. CODE (AND THUS FORFEITS MILLIONS IN POTENTIAL PROFITS) FOR SOME
  173. REASON. THIS IS ONE "WHY" NO ONE CAN ANSWER, NOT EVEN THE PEOPLE WHO
  174. HAD THIS BRILLIANT IDEA.
  175.  
  176.               ********* BUT *********
  177.  
  178. IF ALL THE TECHNICALLY ORIENTED PEOPLE OUT THERE WOULD DO THEIR SHARE
  179. AND HELP DOCUMENT SOME OF KICKSTART, ESPECIALLY THE BOOT UP CODE AND
  180. AMIGADOS, THE PROCESS WOULD BE VERY QUICK AND PAINLESS. AND WE WOULD
  181. ALL BENEFIT.
  182.  
  183. -- Dan Babcock, user OPS239. If you ever have any questions at any time,
  184. just send me a message and I will try to answer.
  185.  
  186.